/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;

import clases.AlmacenArticulo;
import clases.DetalleVenta;
import clases.Venta;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author root
 */
public class MdlDetalleVenta implements Modelo<DetalleVenta>{

    /**
     * 
     * @param detalleventa
     * @param cnx
     * @throws SQLException 
     */
    @Override
    public void insert(DetalleVenta detalleventa, Conexion cnx) throws SQLException {
        String sql = "INSERT INTO detalleVenta(venta, almacenArticulo, cantidad, precio, descuento) "
                + "VALUES (" + detalleventa.getVenta().getIdVenta() + ", "
                + detalleventa.getAlmacenArticulo().getIdAlmacenArticulo() + ", "
                + detalleventa.getCantidad() + ", "
                + detalleventa.getPrecio() + ", "
                + detalleventa.getDescuento() + ");";
        cnx.ejecutar(sql);
    }

    /**
     * 
     * @param cnx
     * @return
     * @throws SQLException 
     */
    @Override
    public int getLastId(Conexion cnx) throws SQLException {
        String sql = "SELECT MAX(idDetalleVenta) FROM detalleVenta;";
        ResultSet rs = cnx.consultar(sql);
        if (rs.next()) {
            return rs.getInt(1);
        }
        return -1;
    }

    /**
     * 
     * @param detalleventa
     * @param cnx
     * @throws SQLException 
     */
    @Override
    public void update(DetalleVenta detalleventa, Conexion cnx) throws SQLException {
        String sql = "UPDATE detalleVenta SET "
                + "venta = " + detalleventa.getVenta().getIdVenta() + ", "
                + "almacenArticulo = " + detalleventa.getAlmacenArticulo().getIdAlmacenArticulo() + ", "
                + "cantidad = " + detalleventa.getCantidad() + ", "
                + "precio = " + detalleventa.getPrecio() + ", "
                + "descuento = " + detalleventa.getDescuento() + " "
                + "WHERE idDetalleVenta = " + detalleventa.getIdDetalleVenta();
        cnx.ejecutar(sql);
    }

    /**
     * 
     * @param query
     * @param cnx
     * @return
     * @throws SQLException 
     */
    @Override
    public ArrayList<DetalleVenta> get(String query, Conexion cnx) throws SQLException {
        ResultSet rs = cnx.consultar(query);
        ArrayList<DetalleVenta> detalles = new ArrayList<>();
        while(rs.next()){
            detalles.add(new DetalleVenta(
                    rs.getInt(rs.getInt(1)),
                    new Venta(){
                        {
                            this.setIdVenta(rs.getInt(2));
                        }
                    },
                    new AlmacenArticulo(){
                        {
                            this.setIdAlmacenArticulo(rs.getInt(3));
                        }
                    },
                    rs.getInt(4),
                    rs.getFloat(5),
                    rs.getFloat(6)
            ));
        }
        return detalles;
    }

    /**
     * 
     * @param id
     * @param cnx
     * @return
     * @throws SQLException 
     */
    @Override
    public DetalleVenta get(int id, Conexion cnx) throws SQLException {
        String sql = "SELECT * FROM detalleVenta WHERE idDetalleVenta LIKE " + id;
        ResultSet rs = cnx.consultar(sql);
        DetalleVenta detalleventa = null;
        if (true) {
            detalleventa = new DetalleVenta(
                    rs.getInt(rs.getInt(1)),
                    new Venta(){
                        {
                            this.setIdVenta(rs.getInt(2));
                        }
                    },
                    new AlmacenArticulo(){
                        {
                            this.setIdAlmacenArticulo(rs.getInt(3));
                        }
                    },
                    rs.getInt(4),
                    rs.getFloat(5),
                    rs.getFloat(6)
            );
        }
        return detalleventa;
    }
    
}
